package com.kujie.service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.kujie.constant.SmartControlConstant;
import com.kujie.domain.query.ControlLightingQuery;
import com.kujie.domain.query.OfficeConsumeEnergyQuery;
import com.kujie.domain.query.OfficeEnergyUseQuery;
import com.kujie.utils.HttpUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.annotation.McpTool;
import org.springaicommunity.mcp.annotation.McpToolParam;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.Map;

/**
 * 能耗服务
 *
 * @author check
 * @date 2025-07-11
 */
@Service
public class EnergyConsumptionService {
    private static final Logger log = LoggerFactory.getLogger(EnergyConsumptionService.class);

    @McpTool(name = "get_office_consume_energy", description = "办公室能耗查询，获取办公室能耗，查询各个时间的水费、电费、水耗能、电能耗数据和水电流量数据" +
            "time（时间）：严格按照 YYYY-MM-DD 格式填写" +
            "如果查询日数据，精确到 YYYY-MM-DD" +
            "如果查询月数据，精确到当月第一天 YYYY-MM-01" +
            "如果查询季度数据，精确到季度的第一个月第一天（例如 Q1 为 YYYY-01-01，Q2 为 YYYY-04-01）" +
            "如果查询半年数据，上半年 YYYY-01-01，下半年 YYYY-07-01" +
            " 如果查询年数据，精确到 YYYY-01-01" +
            "timeFlag（时间粒度）：date（日）、week（周）、month（月）、quarter（季度）、halfYear（半年）、year（年）" +
            "dataType 数据类型：1-用电量，2-用水量，3-空调流量" +
            "水能耗单位为吨" +
            "水费单位为元" +
            "电费单位为元" +
            "电耗能单位为千瓦时" +
            "空调费单位为元" +
            "空调流量单位为立方米")
    public String getOfficeConsumeEnergy(@McpToolParam(description = "时间") String time, @McpToolParam(description = "时间标识") String timeFlag, @McpToolParam(description = "数据类型") String dataType) {
        log.info("办公室能耗查询工具调用");
        return HttpUtils.get(SmartControlConstant.OFFICE_ENERGY_API_URL, null, Map.of("time", time, "timeFlag", timeFlag, "dataType", dataType), new ParameterizedTypeReference<String>() {
        }).getBody();
    }


}
